using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ImageAnalystTools._ClassificationandPatternRecognition
{
    /// <summary>
    /// <para>Remove Raster Segment Tiling Artifacts</para>
    /// <para>Corrects segments or objects cut by tile boundaries during the segmentation process performed as a raster function. This tool is helpful for some regional processes, such as image segmentation, that have inconsistencies near image tile boundaries.</para>
    /// <para>校正在作为栅格函数执行的分割过程中被切片边界切割的线段或对象。此工具对于某些区域进程（例如图像分割）非常有用，这些进程在图像切片边界附近存在不一致。</para>
    /// </summary>    
    [DisplayName("Remove Raster Segment Tiling Artifacts")]
    public class RemoveRasterSegmentTilingArtifacts : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public RemoveRasterSegmentTilingArtifacts()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_segmented_raster">
        /// <para>Input Segmented RGB Or Gray Raster</para>
        /// <para>Select the segmented raster with the tiling artifacts that you want to remove.</para>
        /// <para>选择包含要移除的切片伪影的分割栅格。</para>
        /// </param>
        /// <param name="_out_raster_dataset">
        /// <para>Output Segmented Raster</para>
        /// <para>The path and name of the segmented raster from which you are removing tiling artifacts.</para>
        /// <para>要从中移除切片伪影的分割栅格的路径和名称。</para>
        /// </param>
        public RemoveRasterSegmentTilingArtifacts(object _in_segmented_raster, object _out_raster_dataset)
        {
            this._in_segmented_raster = _in_segmented_raster;
            this._out_raster_dataset = _out_raster_dataset;
        }
        public override string ToolboxName => "Image Analyst Tools";

        public override string ToolName => "Remove Raster Segment Tiling Artifacts";

        public override string CallName => "ia.RemoveRasterSegmentTilingArtifacts";

        public override List<string> AcceptEnvironments => ["compression", "configKeyword", "extent", "geographicTransformations", "nodata", "outputCoordinateSystem", "parallelProcessingFactor", "pyramid", "rasterStatistics", "resamplingMethod", "scratchWorkspace", "snapRaster", "tileSize", "workspace"];

        public override object[] ParameterInfo => [_in_segmented_raster, _out_raster_dataset, _tileSizeX, _tileSizeY];

        /// <summary>
        /// <para>Input Segmented RGB Or Gray Raster</para>
        /// <para>Select the segmented raster with the tiling artifacts that you want to remove.</para>
        /// <para>选择包含要移除的切片伪影的分割栅格。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Segmented RGB Or Gray Raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_segmented_raster { get; set; }


        /// <summary>
        /// <para>Output Segmented Raster</para>
        /// <para>The path and name of the segmented raster from which you are removing tiling artifacts.</para>
        /// <para>要从中移除切片伪影的分割栅格的路径和名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Segmented Raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_raster_dataset { get; set; }


        /// <summary>
        /// <para>Tile width used for segmentation</para>
        /// <para>Specify the tile width from Segment Mean Shift. If left blank, the default is 512 pixels.</para>
        /// <para>从“线段均值偏移”中指定切片宽度。如果留空，则默认值为 512 像素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Tile width used for segmentation")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _tileSizeX { get; set; } = 512;


        /// <summary>
        /// <para>Tile height used for segmentation</para>
        /// <para>Specify the tile height from Segment Mean Shift. If left blank, the default is 512 pixels.</para>
        /// <para>从“线段均移”（Segment Mean Shift） 中指定图块高度。如果留空，则默认值为 512 像素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Tile height used for segmentation")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _tileSizeY { get; set; } = 512;


        public RemoveRasterSegmentTilingArtifacts SetEnv(object compression = null, object configKeyword = null, object extent = null, object geographicTransformations = null, object nodata = null, object outputCoordinateSystem = null, object parallelProcessingFactor = null, object pyramid = null, object rasterStatistics = null, object resamplingMethod = null, object scratchWorkspace = null, object snapRaster = null, double[] tileSize = null, object workspace = null)
        {
            base.SetEnv(compression: compression, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, nodata: nodata, outputCoordinateSystem: outputCoordinateSystem, parallelProcessingFactor: parallelProcessingFactor, pyramid: pyramid, rasterStatistics: rasterStatistics, resamplingMethod: resamplingMethod, scratchWorkspace: scratchWorkspace, snapRaster: snapRaster, tileSize: tileSize, workspace: workspace);
            return this;
        }

    }

}